package cn.zhizihua.config;

import cn.zhizihua.interceptor.LoginInterceptor;
import cn.zhizihua.interceptor.MyInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @Configuration 用于声明一个配置类
 * springboot项目中没有springmvc.xml文件  所以有些配置就需要通过配置类来完成
 * springboot提供了一个接口WebMvcConfigurer  我们可以编写配置类来实现该接口
 *   接口中的方法：
 *       addCorsMappings  配置跨域
 *       addResourceHandlers  配置静态资源的访问
 *       addInterceptors 配置拦截器
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

	@Value("${uploadlocation}")
	String uploadlocation;  //上传文件本地地址

	@Value("${alloworigins}")
	String[] allowOrigins; //允许跨域源的数组

	/**  配置跨域
	 * 相当于前面SSM项目中写的跨域过滤器的作用
	 * @param registry
	 */
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		 /*
		* addMapping：配置可以被跨域的路径，可以任意配置，可以具体到直接请求路径。 
		* allowCredentials：是否开启Cookie
		* allowedMethods：允许的请求方式，如：POST、GET、PUT、DELETE等。
		* allowedOrigins：允许访问的url，可以固定单条或者多条内容
		* allowedHeaders：允许的请求header，可以自定义设置任意请求头信息。 
		* maxAge：配置预检请求的有效时间
		*/
		registry.addMapping("/**")
				//
//			.allowedOrigins("http://localhost:8888/","http://localhost:8899","http://localhost:9999/")//前端地址
				//String... origins  参数是不定项参数  其实就是数组  String[]
			.allowedOrigins(allowOrigins) //允许跨域的源
			.allowCredentials(true)
			.allowedMethods("GET", "POST","PUT","DELETE","OPTIONS")
			.allowedHeaders("*")
			.maxAge(36000);
	}

	/**   配置静态资源的访问
	 * 文件上传  -查看文件路径
	 * 相当于 springmvc.xml中配置的
	 * <mvc:resources mapping="/img/**" location="file:D://upload1118/"/>
	 * @param registry
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/img/**")  //静态资源的访问路径
				.addResourceLocations("file:///"+uploadlocation);  //指定静态资源的实际存储位置
	}

	/**
	 * 配置拦截器
	 * 可以配置多个
	 * 		1、拦截器对象    addInterceptor
	 * 		2、拦截的地址    addPathPatterns
	 * 		3、不拦截的地址  excludePathPatterns
	 * @param registry
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new MyInterceptor())
				.addPathPatterns("/**");
		/* 测试时关闭拦截器 */
//		registry.addInterceptor(new LoginInterceptor()) //后台管理登录拦截
//				.addPathPatterns("/**")
//				.excludePathPatterns("/log/in"); //排除拦截路径 不拦截登录
	}
}